package main

import (
	"fmt"
	"math"
)

func main() {
	/*
		for 循环的练习题：
		练习1：打印 58-23 数字
		练习2：求 1-100 的和
		练习3：打印 1-100 以内，能够被 3 整除，但是不能被 5 整除的数字，统计被打印的数字的个数，每行打印 5 个

		for 循环的嵌套：
		练习4：
			打印乘法表：
			1*1=1
			1*2=1 2*2=4
			...
			1*9=9 2*9=18 ... 9*9=81

		练习5：
			水仙花数：三位数；[100,999]
				每个位上的数字的立方和，刚好等于该数字本身，那么就叫水仙花数
				比如：153
					1*1*1 + 5*5*5 + 3*3*3 = 153

		练习6：
			求素数：打印2-100内的素数（只能被 1 和本身整除）
	*/
	//练习1：
	for i := 58; i >= 23; i-- {
		fmt.Print(i, " ")
	}
	fmt.Println()

	//练习2：
	sum := 0
	for i := 1; i <= 100; i++ {
		sum += i
	}
	fmt.Println(sum)

	//练习3：
	count := 0
	for i := 1; i <= 100; i++ {
		if i%3 == 0 && i%5 != 0 {
			fmt.Print(i, "\t")
			count++
			if count%5 == 0 {
				fmt.Print("\n")
			}
		}
	}
	fmt.Println()
	fmt.Println(count)

	//练习4：
	for i := 1; i <= 9; i++ {
		for j := 1; j <= i; j++ {
			fmt.Print(j, "*", i, "=", i*j, "\t")
		}
		fmt.Println()
	}

	//练习5：
	a, b, c := 0, 0, 0
	for i := 100; i <= 999; i++ {
		a = i % 10
		b = i / 10 % 10
		c = i / 100
		if math.Pow(float64(a), 3)+math.Pow(float64(b), 3)+math.Pow(float64(c), 3) == float64(i) {
			fmt.Print(i, " ")
		}
	}
	fmt.Println()

	//方法二
	fmt.Println("-------------------")
	for i := 1; i <= 9; i++ {
		for j := 0; j <= 9; j++ {
			for k := 0; k <= 9; k++ {
				if math.Pow(float64(i), 3)+math.Pow(float64(j), 3)+math.Pow(float64(k), 3) == float64(i*100+j*10+k) {
					fmt.Printf("%d ", i*100+j*10+k)
				}
			}
		}
	}
	fmt.Println()

	//练习6：
	for i := 2; i < 100; i++ {
		flag := false                                      //记录 i 是否为素数
		for j := 2; j <= int(math.Sqrt(float64(i))); j++ { // 判断到根号 i 就行了
			if i%j == 0 {
				flag = true
				break
			}
		}
		if !flag {
			fmt.Print(i, " ")
		}
	}
	fmt.Println()

	//打印直角三角形
	for i := 0; i < 8; i++ {
		for j := 0; j < i+1; j++ {
			fmt.Print("* ")
		}
		fmt.Println()
	}
	//打印等腰三角形
	for i := 0; i < 8; i++ {
		for j := 0; j < 9+i; j++ {
			if j >= 8-i {
				fmt.Print("* ")
			} else {
				fmt.Print("  ")
			}
		}
		fmt.Println()
	}
}
